아파치 가상 호스트
IT 위키
더 많은 작업
- Apache Virtual Host; 아파치 가상 호스트
- 아파치 웹 서버 하나로 여러 개의 웹사이트(도메인)를 함께 운영하는 기능
가상 호스트는 서버 한 대, 아파치 하나로 www.a.com 과 www.b.com 같은 여러 사이트를 서비스하게 한다. 사이트마다 문서 루트(DocumentRoot)와 로그를 따로 둘 수 있다. 들어온 요청을 어느 사이트로 보낼지는 접속한 IP 주소나 요청에 담긴 호스트 이름으로 가른다.
| 종류 | 구분 기준 | 쓰임 |
|---|---|---|
| 이름 기반(Name-based) | HTTP 요청의 Host 헤더에 적힌 도메인 이름 | IP 주소 하나에 여러 도메인을 운영한다. 가장 흔한 방식 |
| IP 기반(IP-based) | 요청이 들어온 서버의 IP 주소(또는 포트) | 사이트마다 IP 주소를 따로 둔다 |
- 아파치 2.4 는 같은 IP·포트에 VirtualHost 블록이 여럿 있으면 자동으로 이름 기반으로 동작한다. 2.2 까지는
NameVirtualHost *:80을 먼저 적어야 했다 - 어느 블록의 ServerName·ServerAlias 와도 맞지 않는 요청은 처음 적은 블록이 받는다(기본 사이트)
- 도메인마다 DNS 에서 이 서버의 IP 주소를 가리키게 해 두어야 한다
소스로 설치한 아파치는 가상 호스트 설정을 conf/extra/httpd-vhosts.conf 에 따로 두고, httpd.conf 에서 이 파일을 불러온다.
# httpd.conf
Include conf/extra/httpd-vhosts.conf
# conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/home/a/public_html"
ServerName www.a.com
ServerAlias a.com
ErrorLog "logs/a.com-error_log"
CustomLog "logs/a.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/home/b/public_html"
ServerName www.b.com
</VirtualHost>
- ServerName : 이 블록이 받을 도메인 이름
- ServerAlias : 같은 사이트로 받을 다른 이름
- 레드햇 계열 패키지(httpd)는 /etc/httpd/conf.d/*.conf 를 자동으로 읽으므로 /etc/httpd/conf.d/vhost.conf 처럼 파일을 만들어 적는다. 데비안 계열은 /etc/apache2/sites-available/ 에 만들고 a2ensite 로 켠다
- 설정을 확인하려면
httpd -S(apachectl -S)로 가상 호스트 목록을,apachectl configtest로 문법을 본다 - HTTPS 사이트는
<VirtualHost *:443>블록에 SSLEngine on 과 인증서 경로를 적는다(소스 설치는 extra/httpd-ssl.conf)
extra 디렉터리에는 기능별 설정 파일이 따로 있다. 가상 호스트는 httpd-vhosts.conf 이고, 사용자 홈 디렉터리(UserDir)는 httpd-userdir.conf, 서버 상태 페이지는 httpd-info.conf, MPM 의 프로세스·스레드 수는 httpd-mpm.conf 다. 전체 목록은 리눅스 httpd.conf 에 있다.